1、题干
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。
对于每种这样的情况,将第三个词 "third" 添加到答案中,并返回答案。
示例 1:
输入:text = "alice is a good girl she is a good student", first = "a", second = "good"
输出:["girl","student"]
示例 2:
输入:text = "we will we will rock you", first = "we", second = "will"
输出:["we","rock"]
提示:
1 <= text.length <= 1000text由小写英文字母和空格组成text中的所有单词之间都由 单个空格字符 分隔1 <= first.length, second.length <= 10first和second由小写英文字母组成
2、解题思路
- 正则:使用正则表达式匹配满足条件的单词即可
- 代码最少,但要注意处理好单词边界(
\b) 
 - 代码最少,但要注意处理好单词边界(
 - 拆分数组:将字符串按空格拆分为字符串数组,遍历并判断连续的两个单词是否符合条件即可
- 逻辑简单易懂,坑比较少
 
 - 直接遍历:以空格为标识,判断已遍历的单词数量、以及是否跟 
firstsecond相等即可- 代码略多,边界情况较多,容易踩坑
 
 
3、代码1 - 正则
var findOcurrences = function (text, first, second) {
    return text.match(new RegExp(`(?<=\\b${first} ${second} )[a-z]+`, 'g')) || [];
};
4、代码2 - 拆分数组
var findOcurrences = function (text, first, second) {
    const words = text.split(' ');
    return words.reduce((acc, cur, i) => {
        if (cur === second && words[i - 1] === first && words[i + 1]) acc.push(words[i + 1]);
        return acc;
    }, []);
};
5、代码3 - 直接遍历
var findOcurrences = function (text, first, second) {
    let word = '', found = 0, res = [];
    for (let i = 0; i < text.length; i++) {
        if (text[i] !== ' ') {
            word += text[i];
            if (i < text.length - 1) continue;
        }
        if (found === 2) res.push(word), found = word === second && word === first ? 2 : (word === first ? 1 : 0);
        else if (found === 1) found = word === second ? 2 : (word === first ? 1 : 0);
        else if (found === 0) found = word === first ? 1 : 0;
        word = '';
    }
    return res;
};
6、执行结果
